package com.triplelink.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.net.URL;
import java.util.Scanner;

/**
 * Util para métodos comuns na mock da api Rest.
 */
public final class IOUtil {

	public static final String ENCODING = "UTF-8";
	
	/**
	 * Construtor privado vazio
	 */
	private IOUtil() {
		
	}
	
	/**
	 * Recupera o conteudo em String de um arquivo.
	 * @param arquivo File
	 * @return String
	 * @throws FileNotFoundException arquivo não encontrato
	 */
	public static String getString(File arquivo) throws FileNotFoundException {
		
		StringBuilder fileContents = new StringBuilder((int) arquivo.length());
		String lineSeparator = System.getProperty("line.separator");
		Scanner scanner = null;

		try {
			scanner = new Scanner(arquivo, ENCODING);

			if (scanner.hasNextLine()) {
				fileContents.append(scanner.nextLine());
			}

			while (scanner.hasNextLine()) {
				fileContents.append(lineSeparator + scanner.nextLine());
			}
			
		} finally {
			scanner.close();
		}

		return fileContents.toString();
	}
	
	public static String getString(URL url) throws FileNotFoundException {
		
		return getString(new File(url.getPath()));
	}
	
	/**
	 * Escreve o conteudo da String no arquivo.
	 * @param conteudo String
	 * @param file File
	 * @throws IOException talvez por que o arquivo não foi encontrato, segurança, ou ao tentar dar close
	 */
	public static void escreverNoArquivo(String conteudo, File file) throws IOException {
		
		Writer out = null;
		
		try {
			
			out = new OutputStreamWriter(new FileOutputStream(file), ENCODING);
			
		} finally {
			
	        out.close();
	    }
	}
	
	/**
	 * Limpa o conteúdo do arquivo
	 * @param file File
	 * @throws IOException produzido por setLength
	 */
	public static void limparArquivo(File file) throws IOException {
		PrintWriter writer = new PrintWriter(file);
		writer.print("");
		writer.close();
	}
}
